﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*
==========================================================
描述
写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号。

数据范围：两个数都满足−10≤n≤1000
进阶：空间复杂度O(1)，时间复杂度O(1)
==========================================================
*/


/**
 * @param num1 int整型
 * @param num2 int整型
 * @return int整型
 */
int Add(int num1, int num2) 
{
    // write code here
    //原理
    //用异或可以获得两个数进行不进位加法的值(1^0=1,1+0=1；1^1=0,1+1=0)
    //用与运算可以获得两个数每位的进位信息(1&0=0,1+0不进位；1&1=1,1+1进位)



    int add = num1;   //存储进位信息
    int sum = num2;   //存储不进位和
    while (add)  //直到没有出现进位
    {
        int temp = add ^ sum;
        add = (add & sum) << 1;   //右移，如果存在进位信息，使对应sum下一位进位加一
        sum = temp;
    }
    return sum;
}
